有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正在获取WebSphere app Server的实例名称

我的Web服务将在Jboss应用程序服务器或Websphere应用程序服务器上运行。对于它们,我都需要知道实例名,对于Jboss,我可以使用System.getProperty("jboss.server.name"),,但是对于WebSphere,我可以使用什么呢?我不能使用特定于WebSphere的方法,我需要调用系统。性质

谢谢


共 (5) 个答案

  1. # 1 楼答案

    我同意将服务器名指定为环境变量(Manglu的touch也不错)。为了让讨论更加完整,下面是如何通过运行时获取实例名(该API在最近的版本中已被弃用,但仍在使用)

    import com.ibm.websphere.runtime.ServerName;
    
    System.out.println("Display name: " + ServerName.getDisplayName());
    System.out.println("Full name: " + ServerName.getFullName());
    

    示例输出如下

    Display name: server1
    Full name: was7host01Node01Cell\was7host01Node01\server1

  2. # 2 楼答案

    至少对于WebSphere来说,另一种选择是在JNDI树中查找它。 这就是我使用的:

    InitialContext ic = new javax.naming.InitialContext();
    String serverName = ic.lookup("servername").toString();
    

    这样我就不必配置任何东西,因为WebSphere为我绑定了这些信息

    还可以使用“thisNode/Cell/cellname”和“thisNode/nodename”检索单元格和节点名称。集群中有用的东西

  3. # 3 楼答案

    为了保持它与平台无关,可以将一个变量设置为Websphere服务器的JVM参数(如果其集群化,则每个节点一个)。对于Websphere 7,您将在管理控制台中找到以下内容

    Servers > Server Types > Websphere application servers > [your cluster node] >
      >  Java and Process Management  > Process Definition > Java Virtual Machine >
        > Generic JVM arguments 
    

    再加上一个这样的变量

    -DServerName=serverNodeA
    

    然后您可以访问代码中的值作为

    String serverName = System.getproperty("ServerName");
    

    只要您有权向JVM添加参数,这种技术就可以用于所有应用程序服务器。我确信必须有特定于Websphere的API来查询节点名称,但是您要向服务器输入代码,这使得单元测试很困难,而且不可移植。我更喜欢这种方法

  4. # 4 楼答案

    布拉德建议的方法很好,但我会做得稍微不同

    在服务器JVM的自定义属性中,我将添加一个属性服务器名称,并将其值指定为WAS_Server_Name

    这是面包屑:

    服务器->->;流程定义->;Java虚拟机>;自定义属性

    添加一个值为${WAS_SERVER_NAME}的新服务器名

    每个WAS服务器实例都将此WebSphere变量设置为服务器实例的名称。您不必担心输入错误(或类似错误),这种方法适用于所有WAS服务器

    您可以使用设置为模板的值创建服务器,当您创建新服务器时,这些值始终存在

  5. # 5 楼答案

    kurtcebe解决方案运行良好。对于那些使用maven的人,您将无法轻松地将jar放入您的项目中。因此,使用类。因为名字

    try {
      Class<?> c = Class.forName("com.ibm.websphere.runtime.ServerName");
      LOGGER.debug("Class found" + c);
      Method m = c.getMethod("getFullName", new Class<?>[0]);
      LOGGER.debug("Method found" + m);
      Object o = m.invoke(DeliveryServiceUtils.class, new Object[0]);
      LOGGER.debug("Method invoked, response is " + o);
      processName = o.toString();
    }
    catch (Exception ex) {
      processName = "unknown - " + ex.getClass().getName() + ": " + ex.getMessage();
    }